"""
=================================================
@Author: Zenon
@Date: 2025-05-21
@Description：日志处理模块
提供基于loguru的日志处理功能，支持控制台输出和文件输出
==================================================
"""
import os
import sys
from loguru import logger
import configparser

class LogHandler:
    """日志处理类，用于将loguru日志显示到UI并写入文件"""
    def __init__(self, log_text_edit=None):
        self.log_text_edit = log_text_edit
        self.config = self._load_config()
        self._setup_logger()
        
    def _load_config(self):
        """加载配置文件"""
        config = configparser.ConfigParser()
        config_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 
                                  'config', 'config.ini')
        if os.path.exists(config_path):
            config.read(config_path, encoding='utf-8')
        else:
            # 使用默认配置
            config['LOGGING'] = {
                'log_dir': 'logs',
                'log_file': 'tsad_system.log',
                'log_level': 'INFO',
                'rotation': '10 MB',
                'retention': '7 days',
                'compression': 'zip'
            }
        return config
    
    def _setup_logger(self):
        """设置日志记录器"""
        # 移除所有现有处理程序
        logger.remove()
        
        # 添加控制台输出
        logger.add(sys.stderr, level=self.config.get('LOGGING', 'log_level', fallback='INFO'))
        
        # 确保日志目录存在
        log_dir = self.config.get('LOGGING', 'log_dir', fallback='logs')
        os.makedirs(log_dir, exist_ok=True)
        
        # 日志文件路径
        log_file = os.path.join(
            log_dir, 
            self.config.get('LOGGING', 'log_file', fallback='tsad_system.log')
        )
        
        # 添加文件输出
        logger.add(
            log_file,
            rotation=self.config.get('LOGGING', 'rotation', fallback='10 MB'),
            retention=self.config.get('LOGGING', 'retention', fallback='7 days'),
            compression=self.config.get('LOGGING', 'compression', fallback='zip'),
            level=self.config.get('LOGGING', 'log_level', fallback='INFO'),
            encoding='utf-8'
        )
        
        # 如果提供了文本编辑控件，添加UI输出
        if self.log_text_edit:
            logger.add(self.write, format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}")
    
    def write(self, message):
        """将日志消息添加到文本编辑控件中"""
        if self.log_text_edit:
            self.log_text_edit.append(message.strip())
            
    @staticmethod
    def get_logger():
        """获取logger实例"""
        return logger